<?php

include_once '../commons/Conexion.php';
include_once '../model/Usuario.php';

/**
 * Description of UsuarioDao
 *
 * @author User
 */
class UsuarioDao {

    private $tUsuario = 't010_usuario';
    private $tLogin = 't011_login';
    private $tRol = 't012_rol';
    private $tCliente = 't013_cliente_etapa';

    function __construct() {
        
    }

    /* @var $oLogin Login 
     * @result $oLogin Login
     */

    public function saveLogin($oLogin) {

        $oLogin->setId(0);
        try {
            $query = 'INSERT INTO ' . $this->tLogin . '
                (nb_usuario,
                tx_clave)
                VALUES
                ("' . $oLogin->getLogin() . '",
                "' . $oLogin->getPass() . '");';

            $conn = new Conexion();
            $conn->open();
            $conn->query($query);

            $query = 'select l.co_id from ' . $this->tLogin . ' l where l.nb_usuario = "'
                    . $oLogin->getLogin() . '" and l.tx_clave = "' . $oLogin->getPass() . '";';

            $result = $conn->query($query);

            while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $oLogin->setId($fila['co_id']);
            }

            $conn->close();
        } catch (Exception $e) {
            
        }

        return $oLogin;
    }

    /*
     * @var $lCliente long 
     * @var $lEtapa long      
     */

    public function saveClient($lCliente, $lEtapa) {

        try {
            $query = 'insert into %s (co_cliente,
                                    co_etapa) 
                values (%d,%d);';

            $query = sprintf($query, $this->tCliente, $lCliente, $lEtapa);

            $conn = new Conexion();
            $conn->open();
            $conn->query($query);
            $conn->close();
        } catch (Exception $e) {
            
        }
    }

    /* @var $oRol Rol 
     * @result $oRol Rol
     */

    public function saveRol($oRol) {

        $oRol->setId(0);
        try {
            $query = 'INSERT INTO ' . $this->tRol . '
                (nb_nombre)
                VALUES
                ("' . $oRol->getDescripcion() . '");';
            $conn = new Conexion();
            $conn->open();
            $conn->query($query);

            $query = 'select l.co_id from ' . $this->tRol . ' l where l.nb_nombre = "'
                    . $oRol->getDescripcion() . '";';

            $result = $conn->query($query);

            while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $oRol->setId($fila['co_id']);
            }

            $conn->close();
        } catch (Exception $e) {
            
        }

        return $oRol;
    }

    /*
     *  @var $oUsuario Usuario 
     *  @return $oUsuario Usuario
     */

    public function saveUsuario($oUsuario) {

        $oUsuario->setId(0);
        try {

            $oLogin = $this->saveLogin($oUsuario->getLogin());
            if ($oLogin->getId() > 0) {
                $query = 'INSERT INTO ' . $this->tUsuario . ' (
                in_nacionalidad,
                nu_cedula,
                nb_nombre,
                nb_apellido,
                nu_telefono,
                tx_correo,
                fe_nacimiento,
                in_sexo,
                fk_rol,
                fk_login)
                VALUES(
                "' . $oUsuario->getNacionalidad() . '",
                ' . $oUsuario->getCedula() . ',
                "' . $oUsuario->getNombre() . '",
                "' . $oUsuario->getApellido() . '",
                "' . $oUsuario->getTelefono() . '",
                "' . $oUsuario->getCorreo() . '",
                "' . $oUsuario->getFechaNacimiento() . '",
                "' . $oUsuario->getSexo() . '",
                ' . $oUsuario->getRol()->getId() . ',
                ' . $oLogin->getId() . ');';

                $conn = new Conexion();
                $conn->open();
                $conn->query($query);

                $query = 'select l.co_id from ' . $this->tUsuario . ' l where l.in_nacionalidad = "'
                        . $oUsuario->getNacionalidad() . '" and l.nu_cedula = ' . $oUsuario->getCedula() . ';';

                $result = $conn->query($query);

                while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                    $oUsuario->setId($fila['co_id']);
                }

                $conn->query($query);
                $conn->close();
            }
        } catch (Exception $e) {
            
        }
        return $oUsuario;
    }

    /*
     * @var $lUser string
     * @var $lPass string
     * @return $oLogin Login
     */

    public function getLogin($lUser, $lPass) {

        $oLogin = null;

        try {
            $query = 'select l.* from ' . $this->tLogin . ' l where l.nb_usuario = "'
                    . $lUser . '" and l.tx_clave = "' . $lPass . '";';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $oLogin = new Login();
                $oLogin->setId($fila['co_id']);
                $oLogin->setLogin($fila['nb_usuario']);
                $oLogin->setPass($fila['tx_clave']);
            }

            $conn->close();
        } catch (Exception $e) {
            
        }
        return $oLogin;
    }

    /*
     * @var $lUser string    
     * @return $oLogin Login
     */

    public function getLoginByOnlyUser($lUser) {

        $oLogin = null;

        try {
            $query = 'select l.* from ' . $this->tLogin . ' l where l.nb_usuario = "'
                    . $lUser . '";';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            if (isset($result)) {
                while ($fila = @mysql_fetch_array($result, MYSQL_ASSOC)) {
                    $oLogin = new Login();
                    $oLogin->setId($fila['co_id']);
                    $oLogin->setLogin($fila['nb_usuario']);
                    $oLogin->setPass($fila['tx_clave']);
                }
            }

            $conn->close();
        } catch (Exception $e) {
            
        }
        return $oLogin;
    }

    /*
     * @var $lId long
     * @return $oLogin Login
     */

    public function getLoginById($lId) {

        $oLogin = null;

        try {
            $query = 'select l.* from ' . $this->tLogin . ' l where l.co_id = '
                    . $lId . ';';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $oLogin = new Login();
                $oLogin->setId($fila['co_id']);
                $oLogin->setLogin($fila['nb_usuario']);
                $oLogin->setPass($fila['tx_clave']);
            }

            $conn->close();
        } catch (Exception $e) {
            
        }
        return $oLogin;
    }

    /*
     * @var $lIdRol long
     * @return $oRol Rol
     */

    public function getRolById($lIdRol) {

        $oRol = null;

        try {
            $query = 'select l.* from ' . $this->tRol . ' l where l.co_id = '
                    . $lIdRol . ';';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            if (@mysql_numrows($result) > 0) {
                while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                    $oRol = new Rol();
                    $oRol->setId($fila['co_id']);
                    $oRol->setDescripcion($fila['nb_nombre']);
                }
            }
            $conn->close();
        } catch (Exception $e) {
            
        }
        return $oRol;
    }

    /*
     * @var $sName string
     * @return $oRol Rol
     */

    public function getRolByName($sName) {

        $oRol = null;

        try {
            $query = 'select l.* from ' . $this->tRol . ' l where l.nb_nombre = "' . $sName . '";';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            if (@mysql_numrows($result) > 0) {
                while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                    $oRol = new Rol();
                    $oRol->setId($fila['co_id']);
                    $oRol->setDescripcion($fila['nb_nombre']);
                }
            }
            $conn->close();
        } catch (Exception $e) {
            
        }
        return $oRol;
    }

    /*
     * @return $listRoles List<Rol>
     */

    public function getRoles() {

        $listRoles = null;

        try {
            $query = 'select l.* from ' . $this->tRol . ' l;';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            $listRoles = array();
            $i = 0;
            while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $oRol = new Rol();
                $oRol->setId($fila['co_id']);
                $oRol->setDescripcion($fila['nb_nombre']);

                $listRoles[$i++] = $oRol;
            }
            $conn->close();
        } catch (Exception $e) {
            
        }
        return $listRoles;
    }

    /*
     * @var $oLogin Login 
     * @return $oUsuario Usuario 
     */

    public function getUsuarioByLogin($oLogin) {

        $oUsuario = null;

        try {
            $query = 'select l.* from ' . $this->tUsuario . ' l where l.fk_login = '
                    . $oLogin->getId() . ';';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            while ($fila = @mysql_fetch_array($result, MYSQL_ASSOC)) {
                $oUsuario = new Usuario();
                $oUsuario->setId($fila['co_id']);
                $oUsuario->setNacionalidad($fila['in_nacionalidad']);
                $oUsuario->setCedula($fila['nu_cedula']);
                $oUsuario->setNombre($fila['nb_nombre']);
                $oUsuario->setApellido($fila['nb_apellido']);
                $oUsuario->setTelefono($fila['nu_telefono']);
                $oUsuario->setCorreo($fila['tx_correo']);
                $oUsuario->setFechaNacimiento($fila['fe_nacimiento']);
                $oUsuario->setSexo($fila['in_sexo']);
                $oUsuario->setRol($this->getRolById($fila['fk_rol']));
                $oUsuario->setLogin($this->getLoginById($fila['fk_login']));
            }

            $conn->close();
        } catch (Exception $e) {
            
        }
        return $oUsuario;
    }

    /*
     * @var $lId long 
     * @return $oUsuario Usuario 
     */

    public function getUsuarioById($lId) {

        $oUsuario = null;

        try {
            $query = 'select l.* from ' . $this->tUsuario . ' l where l.co_id = '
                    . $lId . ';';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            if (isset($result)) {
                while ($fila = @mysql_fetch_array($result, MYSQL_ASSOC)) {
                    $oUsuario = new Usuario();
                    $oUsuario->setId($fila['co_id']);
                    $oUsuario->setNacionalidad($fila['in_nacionalidad']);
                    $oUsuario->setCedula($fila['nu_cedula']);
                    $oUsuario->setNombre($fila['nb_nombre']);
                    $oUsuario->setApellido($fila['nb_apellido']);
                    $oUsuario->setTelefono($fila['nu_telefono']);
                    $oUsuario->setCorreo($fila['tx_correo']);
                    $oUsuario->setFechaNacimiento($fila['fe_nacimiento']);
                    $oUsuario->setSexo($fila['in_sexo']);
                    $oUsuario->setRol($this->getRolById($fila['fk_rol']));
                    $oUsuario->setLogin($this->getLoginById($fila['fk_login']));
                }
            }
            $conn->close();
        } catch (Exception $e) {
            
        }

        return $oUsuario;
    }

    /*
     * @var $lCliente long      
     * @return $lEtapa long      
     */

    public function getEtapaByClient($lCliente) {

        try {
            $query = 'select co_etapa from %s where co_cliente = %d;';
            $query = sprintf($query, $this->tCliente, $lCliente);

            $conn = new Conexion();
            $conn->open();
            $result = $conn->query($query);

            $lEtapa = 0;
            if (isset($result)) {
                while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                    $lEtapa = $fila['co_etapa'];
                }
            }
            $conn->close();
        } catch (Exception $e) {
            
        }
        return $lEtapa;
    }

    /*
     * @var $sNac string 
     * @var $lCedula long 
     * @return $oUsuario Usuario 
     */

    public function getUsuarioByCI($sNac = "", $lCedula = 0) {

        $oUsuario = null;

        try {
            $query = 'select l.* from ' . $this->tUsuario . ' l where l.in_nacionalidad = "'
                    . $sNac . '" and l.nu_cedula = ' . $lCedula . ';';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            if (isset($result)) {
                while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                    $oUsuario = new Usuario();
                    $oUsuario->setId($fila['co_id']);
                    $oUsuario->setNacionalidad($fila['in_nacionalidad']);
                    $oUsuario->setCedula($fila['nu_cedula']);
                    $oUsuario->setNombre($fila['nb_nombre']);
                    $oUsuario->setApellido($fila['nb_apellido']);
                    $oUsuario->setTelefono($fila['nu_telefono']);
                    $oUsuario->setCorreo($fila['tx_correo']);
                    $oUsuario->setFechaNacimiento($fila['fe_nacimiento']);
                    $oUsuario->setSexo($fila['in_sexo']);
                    $oUsuario->setRol($this->getRolById($fila['fk_rol']));
                    $oUsuario->setLogin($this->getLoginById($fila['fk_login']));
                }
            }
            $conn->close();
        } catch (Exception $e) {
            
        }

        return $oUsuario;
    }

    /*
     * @return $listUsuarios List<Usuario>
     */

    public function getUsuarios() {

        $listUsuarios = null;

        try {
            $query = 'select l.* from ' . $this->tUsuario . ' l order by l.co_id';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            $listUsuarios = array();
            $i = 0;
            while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $oUsuario = new Usuario();
                $oUsuario->setId($fila['co_id']);
                $oUsuario->setNacionalidad($fila['in_nacionalidad']);
                $oUsuario->setCedula($fila['nu_cedula']);
                $oUsuario->setNombre($fila['nb_nombre']);
                $oUsuario->setApellido($fila['nb_apellido']);
                $oUsuario->setTelefono($fila['nu_telefono']);
                $oUsuario->setCorreo($fila['tx_correo']);
                $oUsuario->setFechaNacimiento($fila['fe_nacimiento']);
                $oUsuario->setSexo($fila['in_sexo']);
                $oUsuario->setRol($this->getRolById($fila['fk_rol']));
                $oUsuario->setLogin($this->getLoginById($fila['fk_login']));
                $listUsuarios[$i++] = $oUsuario;
            }
            $conn->close();
        } catch (Exception $e) {
            
        }

        return $listUsuarios;
    }

    /*
     * @var $oRol Rol
     * @return $oUsuarios List<Usuario> 
     */

    public function getUsuariosByRol($oRol) {

        $listUsuarios = null;

        try {
            $query = 'select l.* from ' . $this->tUsuario . ' l where l.fk_rol = ' . $oRol->getId() . ' order by l.co_id;';

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            $listUsuarios = array();
            $i = 0;
            while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $oUsuario = new Usuario();
                $oUsuario->setId($fila['co_id']);
                $oUsuario->setNacionalidad($fila['in_nacionalidad']);
                $oUsuario->setCedula($fila['nu_cedula']);
                $oUsuario->setNombre($fila['nb_nombre']);
                $oUsuario->setApellido($fila['nb_apellido']);
                $oUsuario->setTelefono($fila['nu_telefono']);
                $oUsuario->setCorreo($fila['tx_correo']);
                $oUsuario->setFechaNacimiento($fila['fe_nacimiento']);
                $oUsuario->setSexo($fila['in_sexo']);
                $oUsuario->setRol($this->getRolById($fila['fk_rol']));
                $oUsuario->setLogin($this->getLoginById($fila['fk_login']));
                $listUsuarios[$i++] = $oUsuario;
            }
            $conn->close();
        } catch (Exception $e) {
            
        }

        return $listUsuarios;
    }

    /*
     * @var $lEtapa long
     * @return $oUsuarios List<Usuario> 
     */

    public function getUsuariosByEtapa($lEtapa) {

        $listUsuarios = null;

        try {
            $query = 'select l.* from %s l, %s e where l.co_id = e.co_usuario and e.co_etapa = %d order by l.co_id;';
            $query = sprintf($query, $this->tUsuario, $this->tCliente, $lEtapa);

            $conn = new Conexion();
            $conn->open();

            $result = $conn->query($query);

            $listUsuarios = array();
            $i = 0;
            if (isset($fila)) {
                while ($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
                    $oUsuario = new Usuario();
                    $oUsuario->setId($fila['co_id']);
                    $oUsuario->setNacionalidad($fila['in_nacionalidad']);
                    $oUsuario->setCedula($fila['nu_cedula']);
                    $oUsuario->setNombre($fila['nb_nombre']);
                    $oUsuario->setApellido($fila['nb_apellido']);
                    $oUsuario->setTelefono($fila['nu_telefono']);
                    $oUsuario->setCorreo($fila['tx_correo']);
                    $oUsuario->setFechaNacimiento($fila['fe_nacimiento']);
                    $oUsuario->setSexo($fila['in_sexo']);
                    $oUsuario->setRol($this->getRolById($fila['fk_rol']));
                    $oUsuario->setLogin($this->getLoginById($fila['fk_login']));
                    $listUsuarios[$i++] = $oUsuario;
                }
            }
            $conn->close();
        } catch (Exception $e) {
            
        }

        return $listUsuarios;
    }

    /* @var $oLogin Login 
     * @result $oLogin Login
     */

    public function updateLogin($oLogin) {

        try {
            $query = 'update ' . $this->tLogin . ' l set l.nb_usuario = "%s" , l.tx_clave = "%s" where  l.co_id = %d;';
            $query = sprintf($query, $oLogin->getLogin(), $oLogin->getPass(), $oLogin->getId());

            $conn = new Conexion();
            $conn->open();
            $conn->query($query);
            $conn->close();
        } catch (Exception $e) {
            $oLogin = null;
        }

        return $oLogin;
    }

    /*
     * @var $lCliente long 
     * @var $lEtapa long      
     */

    public function updateClient($lCliente, $lEtapa) {

        try {
            $query = 'update %s set co_etapa = %d where co_cliente = %d;';

            $query = sprintf($query, $this->tCliente, $lEtapa, $lCliente);

            $conn = new Conexion();
            $conn->open();
            $conn->query($query);
            $conn->close();
        } catch (Exception $e) {
            
        }
    }

    /*
     *  @var $oUsuario Usuario 
     *  @return $oUsuario Usuario
     */

    public function updateUsuario($oUsuario) {

        try {

            $oLogin = $this->updateLogin($oUsuario->getLogin());
            if (isset($oLogin)) {
                $query = 'update ' . $this->tUsuario . ' l set l.in_nacionalidad = "%s",
                l.nu_cedula = %d,
                l.nb_nombre = "%s",
                l.nb_apellido = "%s",
                l.nu_telefono = %d,
                l.tx_correo = "%s",
                l.fe_nacimiento = "%s",
                l.in_sexo = "%s",
                l.fk_rol = %d,
                l.fk_login = %d where l.co_id = %d;';

                $query = sprintf($query, $oUsuario->getNacionalidad(), $oUsuario->getCedula(), $oUsuario->getNombre(), $oUsuario->getApellido(), $oUsuario->getTelefono(), $oUsuario->getCorreo(), $oUsuario->getFechaNacimiento(), $oUsuario->getSexo(), $oUsuario->getRol()->getId(), $oLogin->getId(), $oUsuario->getId());

                $conn = new Conexion();
                $conn->open();
                $conn->query($query);
                $conn->close();
            }
        } catch (Exception $e) {
            $oUsuario = null;
        }
        return $oUsuario;
    }

    /* @var $oLogin Login 
     * @return $result boolean
     */

    public function deleteLogin($oLogin) {

        $result = false;
        try {
            $query = 'delete from ' . $this->tLogin . ' where co_id = %d';
            $query = sprintf($query, $oLogin->getId());

            $conn = new Conexion();
            $conn->open();
            $conn->query($query);
            $conn->close();

            $result = true;
        } catch (Exception $e) {
            
        }

        return $result;
    }

    /*
     *  @var $oUsuario Usuario 
     *  @return $result boolean
     */

    public function deleteUsuario($oUsuario) {

        $result = false;
        try {


            $result = $this->deleteLogin($oUsuario->getLogin());
            $this->deleteClient($oUsuario->getId());

            if ($result) {
                $query = 'delete from ' . $this->tUsuario . ' where co_id = %d;';
                $query = sprintf($query, $oUsuario->getId());
                $conn = new Conexion();
                $conn->open();
                $conn->query($query);
                $conn->close();

                $result = true;
            }
        } catch (Exception $e) {
            
        }
        return $result;
    }

    /*
     * @var $lCliente long      
     */

    public function deleteClient($lCliente) {

        try {
            $query = 'delete from %s where co_cliente = %d;';
            $query = sprintf($query, $this->tCliente, $lCliente);

            $conn = new Conexion();
            $conn->open();
            $conn->query($query);
            $conn->close();
        } catch (Exception $e) {
            
        }
    }

}

?>
